﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Generic.Contract;
using Generic.Data.Manager;
using Contract.Business.Entity;
using Contract.Business.Filter;
using DataEntity;

namespace Contract.Data.Manager
{
    //Criado por : Gustavo
    //Data       : 12/20/2011 6:42:54 PM
    public class DMConfiguracao : DMGeneric<BEConfiguracao, FEConfiguracao>
    {
        databaseDataContext dc;

        #region Override

        public override BEConfiguracao Salvar(BEConfiguracao entidade)
        {
            try
            {
                if (entidade.Codigo.Equals(0))
                    entidade.Codigo = Incluir(entidade);
                else
                    Alterar(entidade);

                return entidade;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public override void Excluir(BEConfiguracao entidade)
        {
            try
            {
                using (dc = new databaseDataContext())
                {
                    DEConfiguracao de = dc.DEConfiguracaos.Single(q => q.Codigo.Equals(entidade.Codigo));

                    dc.DEConfiguracaos.DeleteOnSubmit(de);

                    dc.SubmitChanges();
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        public override BEConfiguracao ObterEntidade(int codigo)
        {
            try
            {
                using (dc = new databaseDataContext())
                {
                    DEConfiguracao de = dc.DEConfiguracaos.Single(q => q.Codigo.Equals(codigo));

                    return de.ConvertToBE(1);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        public override List<BEConfiguracao> ObterTodos(FEConfiguracao filter)
        {
            try
            {
                using (dc = new databaseDataContext())
                {
                    var q = from e in dc.DEConfiguracaos
                            where
                            (
                                (((filter.CodigoGrupoPizza != null)
                                && (e.CodigoGrupoPizza == filter.CodigoGrupoPizza)) || (filter.CodigoGrupoPizza == null)) &&

                                (((filter.CodigoGrupoBebida != null)
                                && (e.CodigoGrupoBebida == filter.CodigoGrupoBebida)) || (filter.CodigoGrupoBebida == null)) &&

                                (((filter.Nome != null)
                                && (e.Nome.Contains(filter.Nome))) || (filter.Nome == null))
                            )
                            select e;

                    List<DEConfiguracao> deConfiguracao = q.ToList();

                    List<BEConfiguracao> retorno = new List<BEConfiguracao>();

                    foreach (DEConfiguracao de in deConfiguracao)
                        retorno.Add(de.ConvertToBE(1));

                    return retorno;
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        #endregion

        #region Métodos Auxiliares

        public void MarcarNovidadeVisualizada()
        {
            using (dc = new databaseDataContext())
            {
                DEConfiguracao de = dc.DEConfiguracaos.Single();

                de.NovidadeVisualizada = true;

                dc.SubmitChanges();
            }
        }

        private int Incluir(BEConfiguracao entidade)
        {
            try
            {
                using (dc = new databaseDataContext())
                {
                    DEConfiguracao de = new DEConfiguracao();
                    de.ConvertFromBE(entidade);

                    dc.DEConfiguracaos.InsertOnSubmit(de);

                    dc.SubmitChanges();

                    return de.Codigo;
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        private void Alterar(BEConfiguracao entidade)
        {
            try
            {
                using (dc = new databaseDataContext())
                {
                    DEConfiguracao de = dc.DEConfiguracaos.Single(q => q.Codigo.Equals(entidade.Codigo));

                    de.CodigoGrupoPizza = entidade.CodigoGrupoPizza;
                    de.CodigoGrupoBebida = entidade.CodigoGrupoBebida;
                    de.Nome = entidade.Nome;
                    de.CodigoTamanhoGratisRefri = entidade.CodigoTamanhoPizzaGrande;
                    de.CodigoSubGrupoSuco = entidade.CodigoSubGrupoSuco;
                    de.CodigoTipoPagamentoCupom = entidade.CodigoTipoPagamentoCupom;
                    de.CodigoSubGrupoClassic = entidade.CodigoSubGrupoClassic;
                    de.CodigoTamanhoPizzaPequena = entidade.CodigoTamanhoPizzaPequena;
                    de.CodigoTamanhoPizzaMedia = entidade.CodigoTamanhoPizzaMedia;
                    de.CodigoImpressora = entidade.CodigoImpressora;
                    de.Porta = entidade.Porta;
                    de.CodigoLoja = entidade.CodigoLoja;
                    de.AplicaPromocaoDiaria = entidade.AplicaPromocaoDiaria;
                    de.ValorBorda = entidade.ValorBorda;

                    dc.SubmitChanges();
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        #endregion
    }
}
